X-Git-Url: https://git.r.bdr.sh/rbdr/super-polarity/blobdiff_plain/b587e9d8e0cc5eb1edf972fd3b644704441e5289..4fc09567c557a1110180940cca40fd7144921026:/Super%20Polarity/Actors/MainShip.cs?ds=sidebyside diff --git a/Super Polarity/Actors/MainShip.cs b/Super Polarity/Actors/MainShip.cs deleted file mode 100644 index 9f28c80..0000000 --- a/Super Polarity/Actors/MainShip.cs +++ /dev/null @@ -1,314 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Content; -using Microsoft.Xna.Framework.Graphics; -using Microsoft.Xna.Framework.Audio; - -namespace SuperPolarity -{ - class MainShip : Ship - { - - public static Color BlueColor; - public static Color RedColor; - - ParticleEngine particleEngine; - - protected bool Shooting; - protected int ShotCooldown; - - protected float CurrentImmortalTime; - protected float MaxImmortalTime; - protected bool Flashing; - - protected SoundEffect PolarityChange; - protected SoundEffect ShootSound; - protected SoundEffect Hit; - - public MainShip(SuperPolarity newGame) : base(newGame) {} - - ~MainShip() - { - particleEngine = null; - } - - public override void Initialize(Texture2D texture, Vector2 position) - { - base.Initialize(texture, position); - - MainShip.BlueColor = new Color(0, 184, 229); - MainShip.RedColor = new Color(201, 0, 68); - - PolarityChange = game.Content.Load("Sound\\polaritychange"); - ShootSound = game.Content.Load("Sound\\bullet"); - Hit = game.Content.Load("Sound\\hit"); - - InitParticleEngine(); - SetPolarity(Polarity.Positive); - - ActVelocity = 2.5f; - - ShotCooldown = 50; - MaxImmortalTime = 1500; - - BoxDimensions.X = 2; - BoxDimensions.Y = 2; - BoxDimensions.W = 2; - BoxDimensions.Z = 2; - InitBox(); - - BindInput(); - } - - void InitParticleEngine() - { - particleEngine = ParticleEffectFactory.CreatePolarCircle(Position); - } - - void BindInput() - { - InputController.Bind("moveX", HandleHorizontalMovement); - InputController.Bind("moveY", HandleVerticalMovement); - InputController.Bind("changePolarity", HandleChangePolarity); - InputController.Bind("shoot", HandleShot); - } - - protected void HandleShot(float value) - { - - Shooting = true; - Timer t = new Timer(new TimerCallback(UnlockShot)); - t.Change(ShotCooldown, Timeout.Infinite); - - if (Children.Count > 10) - { - return; - } - - var bullet = ActorFactory.CreateBullet(Position, Angle); - - Children.Add(bullet); - bullet.Parent = this; - - ShootSound.Play(); - } - - protected void UnlockShot(object state) - { - InputController.Unlock("shoot"); - Shooting = false; - } - - protected void HandleChangePolarity(float value) - { - SwitchPolarity(); - } - - public void HandleHorizontalMovement(float value) - { - if (value >= -0.5 && value <= 0.5) - { - value = 0; - } - - Velocity.X = value * MaxVelocity; - } - - public void HandleVerticalMovement(float value) - { - if (value >= -0.5 && value <= 0.5) - { - value = 0; - } - - Velocity.Y = value * MaxVelocity; - } - - public override void SwitchPolarity() - { - base.SwitchPolarity(); - SwitchParticleEngine(CurrentPolarity); - PolarityChange.Play(); - game.Player.ResetMultiplier(); - } - - public override void SetPolarity(Polarity newPolarity) - { - base.SetPolarity(newPolarity); - SwitchParticleEngine(newPolarity); - } - - protected void SwitchParticleEngine(Polarity polarity) - { - if (polarity == Polarity.Positive) - { - particleEngine.Color = MainShip.RedColor; - } - else if (polarity == Polarity.Negative) - { - particleEngine.Color = MainShip.BlueColor; - } - else - { - particleEngine.Color = Color.Gray; - } - } - - public override void Update(GameTime gameTime) - { - base.Update(gameTime); - particleEngine.EmitterLocation = Position; - particleEngine.Update(); - ConstrainToEdges(); - UpdateImmortality(gameTime); - } - - public void UpdateImmortality(GameTime gameTime) - { - if (Immortal) - { - CurrentImmortalTime += gameTime.ElapsedGameTime.Milliseconds; - - if (Flashing) - { - Color = new Color(255, 255, 255, 128); - } - else - { - Color = Color.White; - } - - Flashing = !Flashing; - - if (CurrentImmortalTime > MaxImmortalTime) - { - Immortal = false; - Color = Color.White; - } - } - } - - public override void Move(GameTime gameTime) - { - var VelocityLimit = MaxVelocity; - var SavedVelocity = new Vector2(Velocity.X, Velocity.Y); - - if (Shooting) - { - VelocityLimit = ActVelocity; - } - - if (SavedVelocity.X > VelocityLimit) - { - SavedVelocity.X = VelocityLimit; - } - - if (SavedVelocity.X < -VelocityLimit) - { - SavedVelocity.X = -VelocityLimit; - } - - if (SavedVelocity.Y > VelocityLimit) - { - SavedVelocity.Y = VelocityLimit; - } - - if (SavedVelocity.Y < -VelocityLimit) - { - SavedVelocity.Y = -VelocityLimit; - } - - Position.X = Position.X + SavedVelocity.X; - Position.Y = Position.Y + SavedVelocity.Y; - } - - public override void Magnetize(Ship ship, float distance, float angle) - { - } - - protected void ConstrainToEdges() - { - if (Position.X < 0) - { - Position.X = 0; - - if (Velocity.X < 0) - { - Velocity.X = 0; - } - } - if (Position.X > game.GraphicsDevice.Viewport.Width) - { - Position.X = game.GraphicsDevice.Viewport.Width; - - if (Velocity.X > 0) - { - Velocity.X = 0; - } - } - if (Position.Y < 0) - { - Position.Y = 0; - - if (Velocity.Y < 0) - { - Velocity.Y = 0; - } - } - if (Position.Y > game.GraphicsDevice.Viewport.Height) - { - Position.Y = game.GraphicsDevice.Viewport.Height; - - if (Velocity.Y < 0) - { - Velocity.Y = 0; - } - } - } - - public override void Draw(SpriteBatch spriteBatch) - { - particleEngine.Draw(spriteBatch); - base.Draw(spriteBatch); - } - - public override void Collide(Actor other, Rectangle collision) - { - if (other.GetType().IsAssignableFrom(typeof(StandardShip)) && - !Immortal) - { - Die(); - } - } - - protected override void Die() - { - game.Player.Lives = game.Player.Lives - 1; - game.Player.ResetMultiplier(); - if (game.Player.Lives < 0) - { - Dying = true; - game.GameOver(); - } - else { - Hit.Play(); - Immortal = true; - CurrentImmortalTime = 0; - } - } - - public override void CleanUp() - { - base.CleanUp(); - particleEngine = null; - InputController.Unbind("moveX", HandleHorizontalMovement); - InputController.Unbind("moveY", HandleVerticalMovement); - InputController.Unbind("changePolarity", HandleChangePolarity); - InputController.Unbind("shoot", HandleShot); - } - } -}